//
// Created by 11510 on 2024/6/20.
//
#include <iostream>
#include <string>
using namespace std;

template<class T>
T add(T t1, T t2) {
    printf("template1\n");
    return t1 + t2;
}
template<class T1, class T2>
T1 add(T1 t1, T2 t2) {
    printf("template2\n");
    return t1 + t2;
}
/*
int add(int t1, int t2) {
    return t1 + t2;
}
*/

void test0() {
    int a = 4;
    double b = 1.2;
    cout << add<double>(b, a) << endl;
}

void test1(){
    int x = 4;
    double y = 7.6;
    /**
     * 调用模板二
     * 指定T1为int，没有指定T2
     * 传入的第一个参数本身就是int，不需要类型转换，
     * 传入的第二个参数推导为double
     * 返回类型与第一个参数一致
     */
    cout << add<int,double>(x, y) << endl;

    /*
     * 这里调用了模板一
     */
    cout << add<double>(x, y) << endl;
}
int main() {
    test1();
    return 0;
}
